/**
 * https://leetcode-cn.com/problems/reverse-integer/
 * 整数翻转
 * @param x 
 */
const reverse = (x: number): number => {
    let total = 0;

    while (x !== 0) {
        // 取个位数的值
        const n = x % 10;
        // 除于10, 向下取整
        x = ~~(x / 10)

        // 加上
        total = total * 10 + n;
        
        // 超过了最大整数限制
        if ((total > Math.pow(2, 31) - 1) || (total < (-Math.pow(2, 31)))) {
            return 0
        }
    }

    return total;
};


const reverse3 = (x: number): number => {
    // x是正数还是负数
    let f = x < 0 ? -1 : 1;

    // 最大整数
    const max = Math.pow(2, 31) - 1,
        min = -Math.pow(2, 31);

    let st = x.toString().split('').reverse().join('')

    // 去掉负号
    st = f === -1 ? st.slice(0, -1) : st

    // 处理负号的情况
    let t = +st * f;

    return (t <= max && t >= min) ? t : 0
};

const reverse2 = (x: number): number => {
    if (x === 0) return x;

    // 转为字符串
    let str = x.toString(),
        t = ''

    for (let i = str.length - 1; i >= 0; i--) {
        t += str[i]
    }

    // 处理负号
    if (t[t.length - 1] === '-') {
        t = t.slice(0, -1)
        return (+t > 2 ** (31) ? 0 : -t)
    }


    return (+t > 2 ** 31 - 1 ? 0 : +t)
};

console.log(reverse(-123))